package br.com.linkideias.model.bean;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;


@Entity

public class Curso {
	
	private Integer codigo;
	private CursoNome cursoNome;
	private List<Turno> turnos= new ArrayList<Turno>();
	private List<Faculdade> faculdades= new ArrayList<Faculdade>();
	private List<Periodo> periodos= new ArrayList<Periodo>();
	private List<Aluno> alunos;
	
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	
	//@ManyToOne(fetch=FetchType.LAZY)
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cursoNome_codigo")
	public CursoNome getCursoNome() {
		return cursoNome;
	}
	public void setCursoNome(CursoNome cursoNome) {
		this.cursoNome = cursoNome;
	}
	
	@ManyToMany(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
	@JoinTable(name="cursoTurno",
			joinColumns={@JoinColumn(name="curso_codigo")},
			inverseJoinColumns={@JoinColumn(name="turno_codigo")})
	public List<Turno> getTurnos() {
		return turnos;
	}
	public void setTurnos(List<Turno> turnos) {
		this.turnos = turnos;
	}
	
	@ManyToMany(cascade = { CascadeType.ALL }, fetch=FetchType.EAGER)
	@JoinTable(name="cursoFaculdade",
			joinColumns={@JoinColumn(name="curso_codigo")},
			inverseJoinColumns={@JoinColumn(name="faculdade_codigo")})
	public List<Faculdade> getFaculdades() {
		return faculdades;
	}
	public void setFaculdades(List<Faculdade> faculdades) {
		this.faculdades=faculdades;
	}
	
	@ManyToMany(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
	@JoinTable(name="cursoPeriodo",
			joinColumns={@JoinColumn(name="curso_codigo")},
			inverseJoinColumns={@JoinColumn(name="periodo_codigo")})
	public List<Periodo> getPeriodos() {
		return periodos;
	}
	public void setPeriodos(List<Periodo> periodos) {
		this.periodos = periodos;
	}
	
	@OneToMany(fetch=FetchType.LAZY, mappedBy="curso")
	@Fetch(value=FetchMode.SELECT)
	public List<Aluno> getAlunos() {
		return alunos;
	}
	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}
	
	@Transient
	public boolean isValido() {
		//if(nome != null )
			return true;
		//return false;
	}
}
